package d2_final_exam.d2_second_question;

import java.util.*;
import java.util.stream.Collectors;

public class Test02 {
    public static void main(String[] args) {
        //目标:完成实现景点的题目
        //1、拿数据到程序中来。用对象来封装,用Map集合封装也可以
        HashMap<String, List<String>> selects = new HashMap<>();

        //2、在定义一个List集合,用于存储景点
        List<String> data1 = new ArrayList<>();

        //3、使用Collections进行倒数据进去
        Collections.addAll(data1, "农家乐", "野外拓展");
        //4、然后再将名字与名字选择的数据存入到Map集合中去
        selects.put("张全蛋", data1);

        //5、重复上面步骤,反复将数据存储进去
        List<String> data2 = new ArrayList<>();
        Collections.addAll(data2, "轰趴", "野外拓展", "健身房");
        selects.put("李二狗子", data2);

        List<String> data3 = new ArrayList<>();
        Collections.addAll(data3, "野外拓展");
        selects.put("翠花", data3);

        List<String> data4 = new ArrayList<>();
        Collections.addAll(data4, "轰趴", "健身房");
        selects.put("小帅", data4);

        List<String> data5 = new ArrayList<>();
        Collections.addAll(data5, "农家乐");
        selects.put("有容", data5);

        System.out.println(selects);//展示效果

        //6、请找出每个去除想去的人数是多少, 并输出投票最多的去处是哪个

        //1.定义一个集合,存储景点与景点的选次
        Map<String, Integer> infos = new HashMap<>();
        //2.获取selects集合的所有值
        selects.forEach((name, data) ->
        {
            for (String datum : data) {
                //然后将数据存入到集合中去
                infos.put(datum, infos.containsKey(datum) ? infos.get(datum) + 1 : 1);
            }
        });

        // 3.展示结果
        System.out.println("每个景点的选择次数是");
        System.out.println(infos);

        //7、完成第一个需求的第二问,获取哪个景点的选择次数最多
        System.out.println("选择最多的景点是:");
        //8、首先做保留,防止存在多个次数一样的景点
        Map.Entry<String, Integer> entry =
                infos.
                        entrySet().
                        stream().
                        max(((o1, o2) -> Integer.compare(o1.getValue(), o2.getValue()))).
                        get();

        //9、再次开始使用流stream()
        List<String> okInfos = infos.entrySet().
                stream().
                filter(e -> e.getValue().
                        equals(entry.getValue())).map(k -> k.getKey()).collect(Collectors.toList());

        //10、遍历结果集合
        // 直接展示结果
        System.out.println(okInfos);
//        DateTimeFormatter.ofPattern()

        //11、请找出哪些人没有选择投票最多的去处,输出他们的名字
        //1.还是使用流进行实现
        selects.entrySet().
                stream().
                filter(e -> {
                    //2.遍历获取到景点集合
                    for (String s : e.getValue()) {
                        //3.判断景点是否在最多次景点里面
                        if (okInfos.contains(s)){
                            //4.在里面,就直接进行返回false
                            return false;
                        }
                    }
                    return true;
                }).forEach(e -> System.out.println(e.getKey()));
    }
}
